"""
提示词模板, 

调试代码， 

如果是调试代码, 直接返回结果, 

如果是生产代码, 调用模型
"""

import random
import time

def greet(name, intensity):
    return "Hello, " + name + "!" * int(intensity)


def great2():
    return ("Hello, world!", "Hello, world 222!"), "Hello, world 222!"

def great3(message, chat_history):
    bot_message = random.choice(["How are you?", "I love you", "I'm very hungry"])
    chat_history.append((message, bot_message))

    return "mmmmm", chat_history



story_stat = {
    "人口": 10,
    "食物": 10,
    "武器": 10,
    "领地": 0,
    "科技": 10,
    "文化": 10,
    "战争": 0,
    "疾病": 0,
}


stage = ""

# 主角状态
hero_stat = {
    "name": "奇乙",
    "age": 18,
    "sex": "男",
    "level": 1,
    "exp": 0,
    "hp": 100,
    "mp": 100,
    "attack": 10,
    "defence": 10,
    "speed": 10,
    "luck": 10,
}

events = [
    "主角到了未探索的地区，没有道路，到处都是大洪水后的混乱景象，难以前进。主角感到沮丧，心生退意，派人回王城报告消息。",
    "从王城增援队伍到了，他们带来了食物和武器，并且带来了消息哥哥那边遇到了之前袭击王城的族群，并且取得胜利一路追击，主角感到不能输给哥哥，决定继续探索。",
    "主角继续探索，发现了一座古城，现在被一群野人占领。在和野蛮人的战争中处于下风，成功撤退。", 
    "因为失败，伙伴心情沮丧，主角安顿好伙伴，认真思考原先在王城学习的知识，通过研究地形和天气，成功击败了野蛮人，获得了他们的食物和武器。虽然取得胜利，但是己方的人员也有受伤，难以继续探索，主角决定暂时留下来，和野蛮人共同生活，教会了他们一些农业知识，让他们学会了耕种，开发周围的土地，并和他们建立了友好的关系。",
    "在修养期间，主角掌握了更精确的农业知识，和观测星星和太阳月亮的位置来确定气候，并且学会了如何种植各种农作物，以及如何管理土地。他发现，通过合理的种植和灌溉，可以大大提高农作物的产量。他还发现，不同的地方农作物需要不同的种植方法和灌溉方式，才能获得最好的收成。在和野蛮人交流的过程中，发现共同开发，进行合适的分工和协作能提高工作效果，而不必进行强迫征服。他们自称为挹人，与主角结成同盟。",
    "主角决定继续向西, 部分挹人追随主角，主角派人将信息传回王城。 通过新掌握的知识，主角对未来的进程充满信心。自己肯定不会输给哥哥。",
]

count = 0



things = [
    "描写环境",
    "描写人物",
    "描写主角心里",
    "描写主角和伙伴的对话",
    "描写主角和伙伴的互动",
    "描写战斗",
    "描写战斗结果",
    "描写主角的思考",
    "描写主角的决策",
    "描写地理位置",
    "描写天气",
    "描写星空"
]


def simple_chat(system_prompt, history):
    return "Hello, world!", ["Hello, world 222!"]


def get_user_prompt():
    global count
    count = count + 1
    print("get_user_prompt :" +  str(count))

    # 取 count 是 10 的几倍,
    # 根据倍数, 返回不同的提示词
    n = count // 10
    if n >= len(events):
        n = len(events) - 1
    event = events[n]

    # 生成12以内的随机数
    thing = random.choice(things)

    k = random.choice(list(story_stat.keys()))
    story_stat[k] = story_stat[k] + 4
    
    # 随机生成一个故事, 根据当前的故事状态, 更新当前的故事状态
    return thing + "\n 当前的故事状态是: " + str(story_stat) + "\n 当前的故事是: " + event


history = []

def get_greet(chat=simple_chat):
    """
    返回一个回调函数给 view,
    chat 是大模型的对话调用

    这个函数 作为 提示词 工程, 控制给大模型的信息
    """
    
    def greet(message, chat_history):
        global history
        # 提示词模板
        prompt = get_user_prompt()
        print(prompt)
        print(history)
        # 调用模型
        response = chat(prompt, history)
        # 更新 history
        history.append((prompt, response))
       
        # 将 story_stat 格式化字符串
        state = f"人口: {story_stat['人口']}, 食物: {story_stat['食物']}, 武器: {story_stat['武器']}, 领地: {story_stat['领地']}, 科技: {story_stat['科技']}, 文化: {story_stat['文化']}, 战争: {story_stat['战争']}, 疾病: {story_stat['疾病']}"

        chat_history.append(('前进4', response))

        # 显示 状态, 和回答内容
        return state, chat_history

    return greet